package ejb.com.bbva.cbm.service;
import java.util.HashMap;
import java.util.List;

import com.bbva.cbm.web.servlet.spring.operatoria.CalculadoraEntity;

import ejb.cbm.admin.bean.AuditoriaBean;
import ejb.cbm.admin.entity.ParametroEntity;
import ejb.cbm.operatoria.bean.ChequeBean;
import ejb.cbm.operatoria.bean.ClienteBean;
import ejb.cbm.operatoria.bean.ContratoBean;
import ejb.cbm.operatoria.bean.CuentaBean;
import ejb.cbm.operatoria.bean.OperacionChequeBean;
import ejb.cbm.operatoria.bean.OperacionEfectivoBean;
import ejb.cbm.operatoria.bean.TarjetaBean;
import ejb.cbm.operatoria.entity.OperacionBloqueoEntity;
import ejb.cbm.operatoria.entity.OperacionEfectivoEntity;
import ejb.com.bbva.cbm.dominio.Caja;
import ejb.com.bbva.cbm.dominio.CuentaEntityDTO;
import ejb.com.bbva.cbm.dominio.DatosRetiroEfectivo;
import ejb.com.bbva.cbm.dominio.Oficina;
import ejb.com.bbva.cbm.dominio.TraspasoCajaEntity;
import ejb.com.bbva.cbm.dominio.TraspasoConfirmacionEntity;
import ejb.com.bbva.cbm.util.DatosConsultaSaldoFinal;
import ejb.com.bbva.cbm.util.DatosOperacion;
import ejb.com.bbva.cbm.util.DatosTraspasoCaja;
import ejb.com.bbva.cbm.util.Listado;
import ejb.com.bbva.cbm.util.voucher.DatosVoucherOperacionCaja;
import ejb.cbm.admin.bean.ParametroBean;

//@Local
public interface OperativaServiceLocal {

	public List<ParametroEntity> obtenerTiposDocumento() throws Exception;
	public List<ParametroEntity> obtenerTiposOperacion() throws Exception;
	public List<ClienteBean> buscarCliente(String tipoDocumento,String numeroDocumento,
			 String nombre,String primerApellido,String segundoApellido,String razonSocial) throws Exception;
	public List<HashMap<String,String>> buscarCliente(String numeroOficina,String numeroCuenta,String numeroTarjeta,String tipoDocumento,String numeroDocumento,
			 String nombre,String primerApellido,String segundoApellido,String razonSocial) throws Exception;
	
	public List<HashMap<String,String>> buscarTarjeta(String numeroTarjeta,String tipoDocumento,String numeroDocumento,
			 String nombre,String primerApellido,String segundoApellido) throws Exception;
	
    public List<ParametroEntity> obtenerTiposDivisas() throws Exception;
    public List<ParametroEntity> obtenerTiposCheques() throws Exception;

	public void grabarDepositoCheques(OperacionChequeBean operacion, Long afectaSaldoDisponible, String oficina, String terminal, String usuario) throws Exception;

	public void grabarDepositoEfectivo(OperacionEfectivoBean efectivo,String oficina,String terminal,String usuario) throws Exception;
	
	public OperacionBloqueoEntity grabarBloqueoTarjeta(OperacionBloqueoEntity bloqueo, Long identTarjeta) throws Exception;

	public CuentaEntityDTO obtenerSaldoCuenta(String cuenta) throws Exception;
	
	public TarjetaBean  buscarTarjetaPorNumero(String nroBean, String nroTarjeta) throws Exception;
    
    /***************************************************************************************************
     * SUB MODULO DE CAJA Y BOVEDA
     ***************************************************************************************************/
	public Caja obtenerCajaOperacionPorId(long operacionId) throws Exception;
	
	public List<Caja> obtenerDatosAperturaCaja(String oficinaId, String terminalId, long tipoId) throws Exception;
	public Long grabarDatosAperturaCaja(Caja caja, String usuario) throws Exception;
	
	public List<Caja> obtenerDatosCierreCaja(String oficinaId, String terminalId, long tipoId) throws Exception;
	public Long grabarDatosCierreCaja(Caja caja, String usuario) throws Exception;
	
	public DatosTraspasoCaja obtenerDatosTraspasoCaja(String oficinaId, String terminalId, long tipoId) throws Exception;
	public Long grabarDatosTraspasoCaja(TraspasoCajaEntity traspaso, String usuario) throws Exception;
	
	public List<TraspasoConfirmacionEntity> obtenerDatosConfirmacionTraspasoCaja(String oficinaId, String terminalId, long tipoId) throws Exception;
	public void grabarDatosConfirmacionTraspasoCaja(long operacionId, long estadoId, String usuario) throws Exception;

	public DatosVoucherOperacionCaja obtenerDatosVoucherOperacionCaja(long operacionId) throws Exception;
	
	public DatosConsultaSaldoFinal obtenerDatosConsultaSaldosFinales(String oficinaId) throws Exception;
    public void grabarRetiroEfectivo(DatosRetiroEfectivo retiroEfectivo) throws Exception;
	
	public Oficina obtenerDatosCierreOficina(String oficinaId) throws Exception;
    public void grabarDatosCierreOficina(String oficinaId, String usuario) throws Exception;
    
    /***************************************************************************************************
     * OPERACIONES DE CAJEROS
     ***************************************************************************************************/
    public DatosOperacion obtenerDatosOperacionCajero(String oficinaId, String terminalId) throws Exception;
    
    /*public List<HashMap<String,String>> buscarOperacionEfectivo(String cuenta, String numeroTarjeta,
			String divisa, Double montoi,Double montof) throws Exception ;*/
    

    public void efectuarExtorno(OperacionEfectivoEntity efectivo) throws Exception;
    
    public void guardarAuditoria(AuditoriaBean auditoriaBean) throws Exception;
    
    //public CuentaBean verificarSaldoCliente(HashMap<String,String> datosCuenta) throws Exception ;
    public CuentaBean verificarSaldoCliente(CuentaBean cuenta) throws Exception ;

    public int contarOperacionEfectivo(HashMap<String,Object> parameter) throws Exception;
    public Listado buscarOperacionEfectivo(HashMap<String,Object> parameter) throws Exception;

    
    public String verificarExistenciaCheque(ChequeBean cheque)throws Exception;
    
    public CuentaBean obtenerCuentaCliente(CuentaBean cuenta) throws Exception;
    
    public List<ClienteBean> obtenerClientesCuenta(CuentaBean cuenta) throws Exception;
    
    public TarjetaBean obtenerTarjetaCliente(TarjetaBean tarjeta) throws Exception ;
    
    public List<ClienteBean> obtenerClientesTarjeta(TarjetaBean tarjeta) throws Exception;
    
    public List<CuentaBean> obtenerCuentasCliente(ClienteBean cliente) throws Exception;
    
    public List<TarjetaBean> obtenerTarjetasCliente(ClienteBean cliente) throws Exception;
    
    public List obtenerRelacionConBanco(ClienteBean cliente) throws Exception;
    public List obtenerTarjetas(CuentaBean cuenta) throws Exception;
    
    public List<ContratoBean> obtenerContratosCliente(ClienteBean cliente) throws Exception;
    
    public List<TarjetaBean> obtenerTarjetasContrato(ContratoBean contrato) throws Exception;
    
    public String verificarRolAutorizador(String codigoUsuario, String puesto, String oficina) throws Exception;
    
    public List<ClienteBean> buscarSoloClientes(String tipoDocumento,String numeroDocumento, String nombre,String primerApellido,String segundoApellido,String razonSocial) throws Exception;
    
    public String verificarImporteRetiroCuenta(String cuenta, double importe, String oficinaRegistro,String transaccion) throws Exception;
    
    public Double obtenerSaldoCaja(String oficinaId, String terminalId,String divisa) throws Exception;
    
    public String verificarTraspasosPendientes(Caja caja) throws Exception;
    
	public String verificarSaldoExtorno(OperacionEfectivoEntity efectivo) throws Exception;
        
    public Long grabarDatosCalculadora(String terminal,String registro,String oficina,List<CalculadoraEntity> lstCalculadora) throws Exception;
 
    public List<CalculadoraEntity> openCalculadora(String terminal,String registro,String oficina) throws Exception;
    public String getOficinaNombre(String codigoOficina);
    public Oficina obtenerOficina(String codigoOficina)throws Exception;
    public ParametroBean obtenerPrametro(Long codigoTipoparametro, String descripcion) throws Exception;
}